#include <iostream>
#include <fcntl.h>
#include <unistd.h>
#include<cerrno>
using namespace std;

bool SetNonBlocking(int fd)
{
    int flags = fcntl(fd, F_GETFL, 0);
    if (flags == -1)
    {
        return false;
    }
    flags |= O_NONBLOCK;
    if (fcntl(fd, F_SETFL, flags) == -1)
    {
        return false;
    }
    return true;
}

void test1()
{
    SetNonBlocking(0); // 设置将输入文件设置为非阻塞
    while (1)
    {
        //SetNonBlocking(0);
        char str[1024] = "please input a string:\n";
        write(1, str, sizeof(str)); //像屏幕设备打印消息
        char get[1024];
        int n=read(0, get, sizeof(get));    //从键盘设备读取数据
        if (n==0)
        {
            cout<<"文件结束"<<endl;    //文件结束
        }
        else if(n>0)
        {
            get[n]='\0';
            cout<<"input string is:"<<get<<endl; //打印输入的字符串
        }
        else
        {
            if(errno==EAGAIN||errno==EWOULDBLOCK)//errno==EAGAIN表示输入流没有数据，errno==EWOULDBLOCK表示输入流没有数据
            {
                cout<<"输入流没有数据"<<endl;
            }
            else if(errno==EINTR)//errno==EINTR表示信号中断,读取失败
            {
                cout<<"信号中断"<<endl;
            }
            else 
            {
                perror("read error");//打印出错误信息
            }
        }

        sleep(1);    //睡眠1秒
    }
}

